/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。
 * 
 * 欢迎到知启蒙网站（https://www.zhiqim.com）购买正版软件，知启蒙还提供许多开源框架和软件。
 * 
 * 1、本软件产品所有源代码受《中华人民共和国著作权法》和其他有关法律、法规的保护，其所有知识产权归湖南知启蒙科技有限公司所有；
 * 2、禁止复制和修改。不得复制修改、翻译或改编本软件所有源代码，或者基于本软件产品创作衍生作品；
 * 3、禁止进行逆向工程。不得对本软件的源代码进行逆向工程、反编译或试图以其他方式发现软件的源代码；
 * 4、个别授权：如需进行商业性的销售、复制、分发，包括但不限于软件销售、预装、捆绑等，必须获得知启蒙的书面授权和许可；
 * 5、保留权利：本注释未明示授权的其他一切权利仍归知启蒙所有，任何人使用其他权利时必须获得知启蒙的书面同意。
*/
package net.redxyz.repost.resource.action;

import java.util.Map;

import net.redxyz.top.TaobaoInterface;

import org.zhiqim.httpd.HttpRequest;
import org.zhiqim.httpd.HttpUploader;
import org.zhiqim.httpd.context.core.Action;
import org.zhiqim.kernel.Global;
import org.zhiqim.kernel.logging.Log;
import org.zhiqim.kernel.logging.LogFactory;
import org.zhiqim.kernel.util.Strings;
import org.zhiqim.kernel.util.Urls;
import org.zhiqim.kernel.util.Validates;

/**
 * TOP透传接口调用
 *
 * @version v7.0.1 @author zouzhigang 2021-7-30 新建与整理
 */
public class TopForwardAction implements Action
{
    private static final Log log = LogFactory.getLog(TopForwardAction.class);
    
    @Override
    public void execute(HttpRequest request) throws Exception
    {
        String contentType = request.getContentType();
        if (Validates.isEmpty(contentType) || !Strings.startsWithIgnoreCase(contentType, "multipart/form-data"))
        {//常用的字符串传送
            String queryString = request.getInputStreamString();
            String result = Global.get(TaobaoInterface.class).invokeTaobaoService(queryString);
            
            if (Validates.isEmpty(result) || result.indexOf("error_response") != -1)
                log.info("\r\n[\r\n\t消息请求："+queryString + "\r\n\t响应："+result+"\r\n]");
            
            request.getResponse().print(result);
        }
        else
        {//文件上传传送
            HttpUploader upload = new HttpUploader();
            upload.parseHttpRequest(request, 8 * 1024 * 1024);
            
            Map<String, String> paramMap = upload.getParameters();
            String queryString = Urls.toQueryStringString(paramMap);
            
            String name = upload.getName();
            String fileName = upload.getFileName();
            String mimeType = upload.getFileContentType();
            
            log.info("name="+name);
            log.info("fileName="+fileName);
            log.info("mimeType="+mimeType);
            log.info("bytes="+upload.getFileSize());
            
            String result = Global.get(TaobaoInterface.class).invokeTaobaoService(name, fileName, mimeType, upload.getBytes(), queryString);
            if (Validates.isEmpty(result) || result.indexOf("error_response") != -1)
                log.info("\r\n[\r\n\t上传请求："+queryString + "\r\n\t响应："+result+"\r\n]");
            
            request.getResponse().print(result);
        }
    }
}
